﻿using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Zarion_Quest.Base;
using System.Collections.Generic;
using System;

namespace Zarion_Quest.ShotTypes
{
    class UnidectionalShot : BaseShot
    {
        // TODO TESTAR, não testei esse tiro ainda...mas deve funcionar...acho...
        /// <summary>
        /// Direções do tiro, apenas 4 eixos principais.
        /// </summary>
        public enum Directions { LEFT, RIGHT, UP, DOWN };

        /// <summary>
        /// Direção do tiro
        /// </summary>
        private Directions direction;

        /// <summary>
        /// Construtor...
        /// </summary>
        /// <param name="texture">Imagem ou sprite sheet do tiro</param>
        /// <param name="columns">Quantidade de colunas que o sprite sheet possui</param>
        /// <param name="rows">Quantidade de linhas que o sprite sheet possui</param>
        /// <param name="position">Posição inicial do tiro</param>
        /// <param name="targets">Lista de alvos que o tiro deve testar colisão</param>
        /// <param name="speed">Velocidade do tiro</param>
        /// <param name="damage">Dano que o tiro inflinge</param>
        /// <param name="shotSoundLocation">Localização do som do tiro, para ser usado no Content.Load</param>
        /// <param name="hitSoundLocation">Localização do som do tiro, para ser usado no Content.Load</param>
        /// <param name="direction">Direção do tiro</param>
        public UnidectionalShot(Texture2D texture, int columns, int rows, Vector2 position, List<Object2D> targets, int speed, int damage, String shotSoundLocation, String hitSoundLocation, Directions direction)
            : base(texture, columns, rows, position, targets, speed, damage, shotSoundLocation, hitSoundLocation)
        {
            this.direction = direction;
		}

        /// <summary>
        /// Método para mover na direção escolhida.
        /// </summary>
        /// <param name="gameTime">Game Time</param>
        public override void Update(GameTime gameTime)
        {
            if (direction == Directions.LEFT)
            {
                Position = new Vector2(Position.X - Speed, Position.Y);
				if (Position.X < 0)
                    destroy();
            }
            else if (direction == Directions.RIGHT)
            {
                Position = new Vector2(Position.X + Speed, Position.Y);
                if (Position.X > Game1.Self.Window.ClientBounds.Width + FrameWidth / 2)
					destroy();
            }
            else if (direction == Directions.UP)
            {
                Position = new Vector2(Position.X + Speed, Position.Y);
				if (Position.Y < 0)
                    destroy();
            }
            else if (direction == Directions.DOWN)
            {
                Position = new Vector2(Position.X - Speed, Position.Y);
                if (Position.Y > Game1.Self.Window.ClientBounds.Height + FrameHeight / 2)
                    destroy();
			}
		}
    }
}
